package com.delio.client.pagos.asistencias;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.pagos.horarios.Horarios;
import com.delio.client.util.RemoteStoreFilterField;
import com.delio.client.util.Utilities;
import com.extjs.gxt.ui.client.Style.SelectionMode;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.GridEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.Store;
import com.extjs.gxt.ui.client.util.IconHelper;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Label;
import com.extjs.gxt.ui.client.widget.button.ToggleButton;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters;
import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;

public class PanelGridAsistencia extends ContentPanel{
	private DelioConstants k = GWT.create(DelioConstants.class);
//	private DelioMessages msg = GWT.create(DelioMessages.class);

//	private Button btnDelete;
	private ToolBar toolbar;
	private PagingToolBar toolBarPag;
	
	private ComboBox<BeanModel>cmbTurno;

	private List<ColumnConfig> columns;
	private CheckBoxSelectionModel<BeanModel> sm;
	private ColumnModel cm;
	public static Grid<BeanModel> grid;

	private BeanModel selectedModel;
	@SuppressWarnings("unused")
	private List<BeanModel> selectedModels;
	private Integer selectedSize;


	private GridFilters filters;
	@SuppressWarnings("unused")
	
	private String text = null;
	private RemoteStoreFilterField<BeanModel> filterField;

	public static PanelNuevaAsistencia panelnuevaasistencia;
	
	private  ToggleButton toggle;
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public PanelGridAsistencia() {
		super();
		setBodyBorder(false);
		setHeaderVisible(false);
		setIcon(IconHelper.createPath("images/icons/table.png"));
		setHeading(k.listaAsistencias());
		setLayout(new FitLayout());

		
		DateTimeFormat fmt = DateTimeFormat.getFormat("MM/dd/yyyy");
		String a = fmt.format(new Date());
		Date fechaActual = fmt.parse(a);
	
		
		Asistencias.condicion=true;
		Asistencias.fecha_consulta=fechaActual;
		Asistencias.getPaginate();
		
		
	
	  
	    toggle = new ToggleButton("Automatico",IconHelper.createPath("images/icons/time.png"));
		toggle.setToolTip("Registrar asistencia con fecha actual");
		toggle.toggle(false);
		toggle.addSelectionListener(new SelectionListener<ButtonEvent>() {
			
			@Override
			public void componentSelected(ButtonEvent ce) {
			if(toggle.isPressed()){
				toggle.setText("Manual");
				toggle.setToolTip("Registrar asistencia, diferente a fecha actual");
			    panelnuevaasistencia.valor=false;
			}else{
				toggle.setText("Automatico");
				toggle.setToolTip("Registrar asistencia con fecha actual");
				panelnuevaasistencia.valor=true;}
				
			}
		});
		
		
		toolbar = new ToolBar();
		toolbar.setStyleAttribute("backgroundImage","url(gxt/images/default/panel/white-top-bottom.gif)");
		toolbar.setSpacing(10);
		toolbar.setBorders(true);
		
		

		Horarios.getList();
		Horarios.loader.load();
		cmbTurno = new ComboBox<BeanModel>();
		cmbTurno.setEmptyText(k.comboempty());
	    cmbTurno.setWidth(170);
	  	cmbTurno.setEditable(false);
		cmbTurno.setDisplayField("turno");
		cmbTurno.setValueField("turno");
		cmbTurno.setStore(Horarios.store);
		cmbTurno.setAllowBlank(false);
		cmbTurno.setUseQueryCache(false);
		cmbTurno.addSelectionChangedListener(new SelectionChangedListener<BeanModel>() {
			
			@Override
			public void selectionChanged(SelectionChangedEvent<BeanModel> se) {
			   Integer id=se.getSelectedItem().get("id");
			   Asistencias.turno_id=id;
			   Asistencias.loader.load();
				
			}
		});
		
		
		filters = new GridFilters();
		filters.addFilter(new StringFilter("empleado"));
		filters.addFilter(new StringFilter("horaentrada"));
		filters.addFilter(new StringFilter("horasalida"));
		filters.addFilter(new StringFilter("horastarde"));
		filters.addFilter(new StringFilter("horasextras"));
		filters.addFilter(new StringFilter("fecha"));
		filters.addFilter(new StringFilter("estado"));
		
		filterField = new RemoteStoreFilterField() {

			@Override
			protected void handleOnFilter(String filter) {
				if (filter == null || filter.equals(""))
					text = null;
				else
					text = filter.toLowerCase();
				Asistencias.filter=filter;
				Asistencias.loader.load();
			}
			

			@Override
			protected boolean doSelect(Store store, ModelData parent,
					ModelData record, String property, String filter) {
				String name = record.get("nombres");

				name = name.toLowerCase();

				if (name.startsWith(filter.toLowerCase())) {
					return true;
				}
				return false;
			}
		};
		filterField.bind(Asistencias.store);
		filterField.setWidth(250);
		filterField.setEmptyText(k.buscar());
		
		toolbar.add(filterField);
		toolbar.add(new Label(k.turno()));
		toolbar.add(cmbTurno);
		toolbar.add(toggle);
		toolbar.add(Utilities.getLabel("Asistencia de Empleados","100px"));


		toolBarPag = new PagingToolBar(Utilities.itemsPerPage);
		toolBarPag.bind(Asistencias.loader);
		toolBarPag.setBorders(true);

		columns = new ArrayList<ColumnConfig>();

		sm = new CheckBoxSelectionModel<BeanModel>();
		sm.setSelectionMode(SelectionMode.SINGLE);

		columns.add(sm.getColumn());
		columns.add(new ColumnConfig("empleado", k.Nombres(),100));
		columns.add(new ColumnConfig("horaentrada", k.horaentrada(),100));
		columns.add(new ColumnConfig("horasalida", k.horasalida(), 100));
		columns.add(new ColumnConfig("horasextras", k.horasextras(), 100));
		columns.add(new ColumnConfig("horastarde", k.horastarde(),100));
		columns.add(new ColumnConfig("fecha", k.fechapago(), 100));
		columns.add(new ColumnConfig("estado", k.estadoasistencia(), 100));

		cm = new ColumnModel(columns);

		grid = new Grid<BeanModel>(Asistencias.store, cm);
		grid.setAutoExpandColumn("empleado");
		grid.setLoadMask(true);
		grid.setBorders(true);
		grid.addPlugin(sm);
		grid.addPlugin(filters);
		grid.setSelectionModel(sm);
		grid.addListener(Events.Attach, new Listener<GridEvent<BeanModel>>() {
			@Override
			public void handleEvent(GridEvent<BeanModel> be) {
				Asistencias.loader.load(0, Utilities.itemsPerPage);
			}
		});

		grid.getSelectionModel().addListener(Events.SelectionChange,
				new Listener<SelectionChangedEvent<BeanModel>>() {

					@Override
					public void handleEvent(SelectionChangedEvent<BeanModel> be) {
						selectedSize = be.getSelection().size();

						if (selectedSize == 0) {
							
							panelnuevaasistencia.unbind();
							panelnuevaasistencia.setValidar(false);
				
						
						} else if (selectedSize == 1) {
							
							selectedModel = be.getSelectedItem();
							Asistencias.contrato_id=selectedModel.get("contrato_id");
														
							if(selectedModel.get("horaentrada")==null)
						       Horarios.contrato_id=selectedModel.get("contrato_id");
							else
								Horarios.contrato_id=null;
							
							
							Integer estadoasistencia_id;
							 if(selectedModel.get("estadoasistencia_id")!=null){
								 estadoasistencia_id=selectedModel.get("estadoasistencia_id");
                            	panelnuevaasistencia.setRadio(estadoasistencia_id);}
                            
							panelnuevaasistencia.bind(selectedModel);
							panelnuevaasistencia.setValidar(true);
							
							
						} else if (selectedSize > 1) {
						
							selectedModels = be.getSelection();
							panelnuevaasistencia.unbind();
							panelnuevaasistencia.setValidar(false);
						
						}

					}

				});


		setTopComponent(toolbar);
		setBottomComponent(toolBarPag);

		add(grid);

	}
}

